// 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。
// 请你从 nums 中选出三个整数，使它们的和与 target 最接近。
// 返回这三个数的和。
// 假定每组输入只存在恰好一个解。

// 示例 1：
// 输入：nums = [-1,2,1,-4], target = 1
// 输出：2
// 解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

// 示例 2：
// 输入：nums = [0,0,0], target = 1
// 输出：0

// 提示：
//     3 <= nums.length <= 1000
//     -1000 <= nums[i] <= 1000
//     -104 <= target <= 104

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function(nums, target) {
    if (nums.length === 3) return nums[0] + nums[1] + nums[2];
    nums.sort((a, b)=>{
        return a - b;
    });
    let result = nums[0] + nums[1] + nums[2];
    for(let i = 0; i < nums.length; i++) {
        let L = i + 1;
        let R = nums.length - 1;
        while(L < R) {
            let sum = nums[i] + nums[L] + nums[R];
            if (Math.abs(target - sum) < Math.abs(target - result)) {
                result = sum;
            }
            if (sum === target) {
                return target;
            } else if(sum < target) {
                L++;
            } else if(sum > target) {
                R--;
            }
        }
    }
    return result;
};

console.log(threeSumClosest([-1,2,1,-4], 1));


